#include "uart.h"

bit busy1;
uint8_t xdata rx1_buf[RX1_MAX_LEN];
uint8_t xdata rx1_sta;
uint8_t xdata uart1_Idle;

char  putchar(char c)
{
	Uart1SendByte(c);
	return c;
}

void Uart1Init(void)		//115200bps@33.1776MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
	AUXR |= 0x04;		//定时器2时钟为Fosc,即1T
	T2L = 0xB8;		//设定定时初值
	T2H = 0xFF;		//设定定时初值
	AUXR |= 0x10;		//启动定时器2
}

void Uart_value_Init(void)
{
	memset(rx1_buf,0,RX1_MAX_LEN);
	rx1_sta = 0;
	busy1 = 0;
	uart1_Idle = 0;
	ES = 1;
}

void Uart_init(void)
{
	Uart1Init();
	Uart_value_Init();
}


void Uart1SendByte(char p)
{
	while (busy1);
	busy1 = 1;
	SBUF = p;
}

void Uart1SendStr(char *p,uint8_t len)
{
    while (len--)
    {
		Uart1SendByte(*p++);
    }
}


void Uart1_handle(void)
{
	Uart1SendStr(rx1_buf,rx1_sta&0x7f);
	rx1_sta = 0;
}

void Uart1Isr() interrupt 4
{
	if (TI)
	{
		TI = 0;
		busy1 = 0;
	}
	if (RI)
	{
		RI = 0;
		if((rx1_sta & 0x80) == 0){
			rx1_buf[rx1_sta++] = SBUF; 
			uart1_Idle = 0x80;
		}

		// //不定长数据以 0X0D 0X0A结尾。
		// if(rx1_buf[rx1_sta-1] == 0x0d)
		// {
		// 	if(SBUF == 0X0A){
		// 		rx1_buf[rx1_sta++] = SBUF;
		// 		rx1_buf[rx1_sta] = '\0';
		// 		rx1_sta |= 0x80;
		// 	}
		// 	else
		// 	rx1_buf[rx1_sta++] = SBUF;
		// }
		// else
		// 	rx1_buf[rx1_sta++] = SBUF;
	}
}

